package com.fxhy.utils;

import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;

import org.apache.commons.codec.binary.Base64;

import com.thoughtworks.xstream.core.util.Base64Encoder;

/**
 * base64 图片
 * @author lifengyao
 *
 */
public class Base64Util {
	
	public static String GetBaseStrByImg(String imgFile){
		ByteArrayOutputStream data = new ByteArrayOutputStream();
	    try {
	        // 创建URL
	        URL url = new URL(imgFile);
	        byte[] by = new byte[1024];
	        // 创建链接
	        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
	        conn.setRequestMethod("GET");
	        conn.setConnectTimeout(5000);
	        InputStream is = conn.getInputStream();
	        // 将内容读取内存中
	        int len = -1;
	        while ((len = is.read(by)) != -1) {
	            data.write(by, 0, len);
	        }
	        // 关闭流
	        is.close();
	    } catch (IOException e) {
	        e.printStackTrace();
	    }
	    // 对字节数组Base64编码
	    Base64Encoder encoder = new Base64Encoder();
		return encoder.encode(data.toByteArray());
	}
	
	public static String GetImageStr()    
    {//将图片文件转化为字节数组字符串，并对其进行Base64编码处理    
        String imgFile = "d://test.jpg";//待处理的图片    
        InputStream in = null;    
        byte[] data = null;    
        //读取图片字节数组    
        try     
        {    
            in = new FileInputStream(imgFile);            
            data = new byte[in.available()];    
            in.read(data);    
            in.close();    
        }     
        catch (IOException e)     
        {    
            e.printStackTrace();    
        }    
        //对字节数组Base64编码    
        Base64 encoder = new Base64();    
        return encoder.encodeAsString(data);//返回Base64编码过的字节数组字符串    
    }  
      
    //base64字符串转化成图片  
    public static boolean GenerateImage(String imgStr,String imgFilePath)  
    {   //对字节数组字符串进行Base64解码并生成图片  
        if (imgStr == null) //图像数据为空  
            return false;  
        Base64 decoder = new Base64();    
        try   
        {  
            //Base64解码  
            @SuppressWarnings("static-access")
			byte[] b = decoder.decodeBase64(imgStr);
            for(int i=0;i<b.length;++i)  
            {  
                if(b[i]<0)  
                {//调整异常数据  
                    b[i]+=256;  
                }  
            }  
            //生成jpeg图片    
            OutputStream out = new FileOutputStream(imgFilePath);      
            out.write(b);  
            out.flush();  
            out.close();  
            return true;  
        }   
        catch (Exception e)   
        {  
            return false;  
        }  
    }
}
